/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import model.Usuario;
import model.Viaje;
import java.util.List;
import model.Itinerario;
import model.Lugar;
import model.SugerenciaViaje;
import org.apache.log4j.Logger;
import service.ItinerarioService;
import service.UsuarioService;
import service.LugarService;
import service.SugerenciaService;
import service.ViajeService;
import service.VotoService;


/**
 *@author Fatima Pestana
 * @author Geral Zerpa
 */
public class GenerarItinerario extends AbstractCommandController {

        private UsuarioService usuarioService;
        private ViajeService viajeService;
        private SugerenciaService sugerenciaService;
        private ItinerarioService itinerarioService;
        private static Logger loggers = null;
        private VotoService votoService;

    public void setViajeService(ViajeService viajeService) {
        this.viajeService = viajeService;
    }

    public void setItinerarioService(ItinerarioService itinerarioService) {
        this.itinerarioService = itinerarioService;
    }

    public void setSugerenciaService(SugerenciaService sugerenciaService) {
        this.sugerenciaService = sugerenciaService;
    }

    public void setUsuarioService(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }

    public void setVotoService(VotoService votoService) {
        this.votoService = votoService;
    }


    public GenerarItinerario() {
        this.setCommandClass(Usuario.class);
    }

    @Override
     protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object form, BindException errors) throws Exception {
        Map model = new HashMap();
        Usuario user2;
        Viaje via;
        user2 = (Usuario) usuarioService.getUsuario(Long.parseLong(request.getParameter("ux")));
        via = (Viaje) viajeService.getViaje(Long.parseLong(request.getParameter("mv")));
        SugerenciaViaje SV1;
        SugerenciaViaje SV2;
        SugerenciaViaje SV3;
        SugerenciaViaje SV4;
        SV2= (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(Long.parseLong(request.getParameter("opcion2")));
        SV3= (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(Long.parseLong(request.getParameter("opcion3")));
        SV4= (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(Long.parseLong(request.getParameter("opcion4")));
        if (request.getParameter("opcion1").equals("0")){
                List resultados = new ArrayList();
                List lugar = new ArrayList();
                List opciones;
                opciones = sugerenciaService.getListaSugerencia(Long.parseLong(request.getParameter("mv")));
                for (int i = 0; i < opciones.size(); i++){
                    List votos;
                    SugerenciaViaje sviaje;
                    sviaje = (SugerenciaViaje) opciones.get(i);
                    votos = votoService.contVotoList(sviaje.getIdSugviaje());
                    lugar.add(sviaje.getNombre());
                    resultados.add(votos.get(0));
                }
                request.getSession().setAttribute("clienteList", null);
                model.put("usuario", user2);
                model.put("viaje", via);
                model.put("Resultado", resultados);
                model.put("LugarV", lugar);
                model.put("sugerencias",opciones);
                model.put("Res","Tiene que selecionar 4 Destinos para Viajar");
                return new ModelAndView("OpcionesItinerario", model);
        }else{
            SV1= (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(Long.parseLong(request.getParameter("opcion1")));
        }
        if (request.getParameter("opcion2").equals("0")){
                List resultados = new ArrayList();
                List lugar = new ArrayList();
                List opciones;
                opciones = sugerenciaService.getListaSugerencia(Long.parseLong(request.getParameter("mv")));
                for (int i = 0; i < opciones.size(); i++){
                    List votos;
                    SugerenciaViaje sviaje;
                    sviaje = (SugerenciaViaje) opciones.get(i);
                    votos = votoService.contVotoList(sviaje.getIdSugviaje());
                    lugar.add(sviaje.getNombre());
                    resultados.add(votos.get(0));
                }
                request.getSession().setAttribute("clienteList", null);
                model.put("usuario", user2);
                model.put("viaje", via);
                model.put("Resultado", resultados);
                model.put("LugarV", lugar);
                model.put("sugerencias",opciones);
                model.put("Res","Tiene que selecionar 4 Destinos para Viajar");
                return new ModelAndView("OpcionesItinerario", model);
        }else{
            SV2= (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(Long.parseLong(request.getParameter("opcion2")));
        }

        if (request.getParameter("opcion3").equals("0")){
                List resultados = new ArrayList();
                List lugar = new ArrayList();
                List opciones;
                opciones = sugerenciaService.getListaSugerencia(Long.parseLong(request.getParameter("mv")));
                for (int i = 0; i < opciones.size(); i++){
                    List votos;
                    SugerenciaViaje sviaje;
                    sviaje = (SugerenciaViaje) opciones.get(i);
                    votos = votoService.contVotoList(sviaje.getIdSugviaje());
                    lugar.add(sviaje.getNombre());
                    resultados.add(votos.get(0));
                }
                request.getSession().setAttribute("clienteList", null);
                model.put("usuario", user2);
                model.put("viaje", via);
                model.put("Resultado", resultados);
                model.put("LugarV", lugar);
                model.put("sugerencias",opciones);
                model.put("Res","Tiene que selecionar 4 Destinos para Viajar");
                return new ModelAndView("OpcionesItinerario", model);
        }else{
            SV3= (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(Long.parseLong(request.getParameter("opcion3")));
        }
        if (request.getParameter("opcion4").equals("0")){
                List resultados = new ArrayList();
                List lugar = new ArrayList();
                List opciones;
                opciones = sugerenciaService.getListaSugerencia(Long.parseLong(request.getParameter("mv")));
                for (int i = 0; i < opciones.size(); i++){
                    List votos;
                    SugerenciaViaje sviaje;
                    sviaje = (SugerenciaViaje) opciones.get(i);
                    votos = votoService.contVotoList(sviaje.getIdSugviaje());
                    lugar.add(sviaje.getNombre());
                    resultados.add(votos.get(0));
                }
                request.getSession().setAttribute("clienteList", null);
                model.put("usuario", user2);
                model.put("viaje", via);
                model.put("Resultado", resultados);
                model.put("LugarV", lugar);
                model.put("sugerencias",opciones);
                model.put("Res","Tiene que selecionar 4 Destinos para Viajar");
                return new ModelAndView("OpcionesItinerario", model);
        }else{
            SV4= (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(Long.parseLong(request.getParameter("opcion4")));
        }
        Itinerario i1 = new Itinerario(SV1,via);
        Itinerario i2 = new Itinerario(SV2,via);
        Itinerario i3 = new Itinerario(SV3,via);
        Itinerario i4 = new Itinerario(SV4,via);
        itinerarioService.saveItinerario(i1);
        itinerarioService.saveItinerario(i2);
        itinerarioService.saveItinerario(i3);
        itinerarioService.saveItinerario(i4);

        List ruta;
        List lugar = new ArrayList();
        List idIti = new ArrayList();
        ruta = itinerarioService.getListaItinerario(via.getIdViaje());
        for (int i = 0; i < ruta.size(); i++){
            SugerenciaViaje sviaje;
            Itinerario it;
            it = (Itinerario) ruta.get(i);
            sviaje = (SugerenciaViaje) sugerenciaService.getSugerenciaViaje(it.getSugerenciaViaje().getIdSugviaje());
            lugar.add(sviaje.getNombre());
            idIti.add(it.getIdIti());
        }
        request.getSession().setAttribute("clienteList", null);
        model.put("usuario", user2);
        model.put("viaje", via);
        model.put("idItinerario",idIti);
        model.put("LugarV",lugar);
        return new ModelAndView("VerItinerario", model);
    }

}
